#include <stdio.h>
#include <stdlib.h>
#define ARRAY_SIZE 100   //宏定义数组大小
#define MAX_VALUE 10000  //宏定义数组中随机数的最大值

/*
* param[out] arr      将要被填充随机数据的数组
* param[in]  uplimit  int型随机数据的最大大小
* param[in]  num      填充数据的数量
* return[void]        没有返回值
*/

void setIntArray(int arr[],int uplimit,int num)
{
    int i;
    srand((int)time(0));                 
    for(i=0;i<num;i++)
    {
        arr[i]=(int)random() % uplimit;    //random是假随机函数，并不能产生真正随机的数组，经常出现重复数据，需要加入srand加入随机种子，即使这样，该函数产生的也并非真正随机的数据,随机种子相同的情况下，还会导致产生相同的随机数数列,由于随机数函数是一个*非常重要*的函数之一，有很多有兴趣可以查阅资料，找一个真正的随机数函数来使用
    
    }
}

/*
* param [in-out] a     需要排序的数组
* param [in]     left  需要排序的数组左边界
* param [in]     right 需要排序的数组右边界
* return[void]         没有返回值
*/
void quicksort(int a[],int left,int right)
{
    if(left<right)
    {
        int i,j,flag;
        i=left;
        j=right;
        flag=a[i];//第一个数为坑
        while(i<j)
        {
            while((i<j) && (a[j]>=flag))
            {
                j--;
            }
            if(a[j]<flag)
            {
                a[i]=a[j];
                i++;
            }
            while((i<j) && (a[i]<=flag))
            {  
                i++;
            }
            if(a[i]>flag)
            {
                a[j]=a[i];
                j--;        
            }
        }
        a[i]=flag;
        quicksort(a,left,i-1);//左序递归
        quicksort(a,i+1,right);//右序递归
    }    
}
/*
* param[in] a     需要被输出在屏幕的数组
* param[in] size  数组的长度
* return[void]    没有返回值
*/
void printResult(int a[], int size)
{
    int i=0;
    for(i=0;i<size;i++)
    {
        printf("%d\n",a[i]);
    }
}
/*
*主函数
*/
void main()
{
    int a[ARRAY_SIZE];
    setIntArray(a,MAX_VALUE, ARRAY_SIZE);
    quicksort(a, 0, ARRAY_SIZE - 1);
    printResult(a, ARRAY_SIZE);
}
